﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;

using MySql.Data.MySqlClient;

namespace MakeIT.MiraPark.Negocios
{
    public static partial class ModelBO
    {

        public static MensalistaVO getMensalista( int idMensalista)
        {
            List<MensalistaVO> listMensalistaVOs = getMensalistas(idMensalista, false);
            if (listMensalistaVOs != null && listMensalistaVOs.Count > 0)
                return listMensalistaVOs[0];
            else
                return null;
        }

        public static List<MensalistaVO> getMensalistas()
        {
            return getMensalistas(false);
        }
        public static List<MensalistaVO> getMensalistas(bool ativo)
        {
            return getMensalistas(null, ativo);
        }
        public static List<MensalistaVO> getMensalistas(int? idMensalista, bool ativo)
        {
            string where = "WHERE ";
            StringBuilder query = new StringBuilder();

            query.AppendLine("SELECT m.IdMensalista, m.IdCliente, c.Nome, m.IdTabelaMensal, tm.TabelaMensal, m.DiaPgto, m.Ativo, m.QtdVagas, m.Situacao, m.Cadastro, m.Edicao ");
            query.AppendLine("FROM mensalista m LEFT JOIN tabelamensal tm on m.IdTabelaMensal = tm.IdTabelaMensal ");
            query.AppendLine("LEFT JOIN cliente c on m.IdCliente = c.IdCliente ");
            if (ativo)
            {
                query.AppendLine(where + "m.Ativo ");
                where = "AND ";
            }
            if (idMensalista != null)
            {
                query.AppendLine(where + "m.IdMensalista=?IdMensalista ");
                where = "AND ";
            }
            query.AppendLine("ORDER BY c.nome ASC ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            if (idMensalista != null) cmd.Parameters.AddWithValue("?IdMensalista", idMensalista);

            MySqlDataReader reader = null;
            try
            {
                cmd.Connection.Open();

                reader = cmd.ExecuteReader();

                List<MensalistaVO> listMensalista = new List<MensalistaVO>();

                while (reader.Read())
                {
                    MensalistaVO MensalistaVO = MensalistaVO.CreateMensalistaVO();
                    MensalistaVO.idMensalista = reader.GetInt32("IdMensalista");
                    MensalistaVO.clienteVO.idCliente = reader.GetInt32("IdCliente");
                    MensalistaVO.clienteVO.nome = reader.GetString("Nome");
                    MensalistaVO.tabelaMensalVO.idTabelaMensal = reader.GetInt32("IdTabelaMensal");
                    MensalistaVO.tabelaMensalVO.tabelaMensal = reader.GetString("TabelaMensal");
                    MensalistaVO.diaPgto = reader.GetInt32("DiaPgto");
                    MensalistaVO.qtdVagas = reader.GetInt32("QtdVagas");
                    MensalistaVO.ativo = (bool)reader.GetBoolean("Ativo");
                    MensalistaVO.situacao = reader.GetString("Situacao");
                    MensalistaVO.cadastro = reader.GetDateTime("Cadastro");
                    MensalistaVO.edicao = reader.GetDateTime("Edicao");

                    listMensalista.Add(MensalistaVO);
                }
                reader.Close();
                return listMensalista;
            }
            catch (Exception ex){ throw ex; }
            finally { cmd.Connection.Close(); }
        }

        public static void setMensalista(MensalistaVO MensalistaVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("UPDATE mensalista ");
            query.AppendLine("SET IdCliente=?IdCliente, IdTabelaMensal=?IdTabelaMensal, DiaPgto=?DiaPgto, QtdVagas=?QtdVagas, Ativo=?Ativo, Situacao=?Situacao, Cadastro=?Cadastro, Edicao=?Edicao ");
            query.AppendLine("WHERE IdMensalista=?IdMensalista ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdMensalista", MensalistaVO.idMensalista);
            cmd.Parameters.AddWithValue("?IdCliente", MensalistaVO.idCliente);
            cmd.Parameters.AddWithValue("?IdTabelaMensal", MensalistaVO.idTabelaMensal);
            cmd.Parameters.AddWithValue("?DiaPgto", MensalistaVO.diaPgto);
            cmd.Parameters.AddWithValue("?QtdVagas", MensalistaVO.qtdVagas);
            cmd.Parameters.AddWithValue("?Ativo", MensalistaVO.ativo);
            cmd.Parameters.AddWithValue("?Situacao", MensalistaVO.situacao);
            cmd.Parameters.AddWithValue("?Cadastro", MensalistaVO.cadastro);
            cmd.Parameters.AddWithValue("?Edicao", MensalistaVO.edicao);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }

        public static long newMensalista(MensalistaVO MensalistaVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("INSERT INTO mensalista ");
            query.AppendLine("SET IdCliente=?IdCliente, IdTabelaMensal=?IdTabelaMensal, DiaPgto=?DiaPgto, QtdVagas=?QtdVagas, Ativo=?Ativo, Situacao=?Situacao, Cadastro=?Cadastro, Edicao=?Edicao ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdCliente", MensalistaVO.idCliente);
            cmd.Parameters.AddWithValue("?IdTabelaMensal", MensalistaVO.idTabelaMensal);
            cmd.Parameters.AddWithValue("?DiaPgto", MensalistaVO.diaPgto);
            cmd.Parameters.AddWithValue("?QtdVagas", MensalistaVO.qtdVagas);
            cmd.Parameters.AddWithValue("?Ativo", MensalistaVO.ativo);
            cmd.Parameters.AddWithValue("?Situacao", MensalistaVO.situacao);
            cmd.Parameters.AddWithValue("?Cadastro", MensalistaVO.cadastro);
            cmd.Parameters.AddWithValue("?Edicao", MensalistaVO.edicao);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
                return cmd.LastInsertedId;
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }

        public static void delMensalista(MensalistaVO MensalistaVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("DELETE FROM mensalista ");
            query.AppendLine("WHERE IdMensalista=?IdMensalista ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdMensalista", MensalistaVO.idMensalista);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }
    }
}
